from datetime import date

from rest_framework.permissions import IsAdminUser
from rest_framework.views import APIView
from rest_framework.response import Response

from users.models import User


# 展示用户数量
class UserCountView(APIView):
    def get(self, request):
        # 获取数据(普通用户)(is_staff表示这个用户是费管理员身份)
        count = User.objects.filter(is_staff=False).count()
        # 返回数据
        return Response({"count": count})


# 获取当天用户注册数量
class UserTodayCountView(APIView):
    def get(self, request):
        # 获取当天日期
        today = date.today()

        # 获取数据(当天注册的用户)(is_staff表示这个用户是费管理员身份)gte是大于等于
        count = User.objects.filter(is_staff=False, date_joined__gte=today).count()
        # 返回数据
        return Response({"count": count})


# 当天登录用户总量统计
class UserDayActiveCountView(APIView):

    def get(self, request):
        # 获取当天日期
        now_date = date.today()
        # 获取当天登录用户总数（普通用户）
        count = User.objects.filter(is_staff=False, last_login__gte=now_date).count()
        # 返回数量
        return Response({'count': count})


# 当天下单用户总量统计
class UserDayOrderCountView(APIView):

    # 权限指定（管理员用户才能够访问）
    # permission_classes = [IsAdminUser]

    def get(self, request):
        # 获取当天日期
        now_date = date.today()
        # 获取当天下单用户总数（普通用户）  关联过滤查询 以订单表的数据作为用户表的查询条件
        # 这里获取到的是重复信息，一个用户下了多次单，就会有多个重复的users，这里需要通过去重操作，获取用户的一条信息
        users = User.objects.filter(is_staff=False, orders__create_time__gte=now_date)
        # 去重
        user = set(users)
        # 获取下单的人数
        count = len(user)
        # 返回数量
        return Response({'count': count})